1749. 任意子数组和的绝对值的最大值

1749. 任意子数组和的绝对值的最大值

Similar Question

Solution Tips

方案一: 贪心 + 分情况讨论

其实就是把 53. 最大子数组和 做两遍

var maxAbsoluteSum = function(nums) {
    let positiveMax = 0, negativeMin = 0;
    let positiveSum = 0, negativeSum = 0;
    for (let num of nums) {
        positiveSum += num
        positiveMax = Math.max(positiveMax, positiveSum)
        positiveSum = Math.max(0, positiveSum)
        negativeSum += num
        negativeMin = Math.min(negativeMin, negativeSum)
        negativeSum = Math.min(0, negativeSum)
    }
    return Math.max(positiveMax, -negativeMin)
};

方案二: 前缀和

pPV7SSS.png

var maxAbsoluteSum = function (nums) {
    let s = 0, mx = 0, mn = 0;
    for (const x of nums) {
        s += x;
        mx = Math.max(mx, s);
        mn = Math.min(mn, s);
    }
    return mx - mn;
};